package com.cskaoyan.javase.file._4exercise;

/**
 * @description: 小练习
 * @author: wuguidong@cskaoyan.onaliyun.com
 **/

/**
 * 在jvm启动时,需要加载很多类,在加载类的过程中,类中字符串常量就会被加入字符串常量池
 *
 *
 */
public class Demo2 {
    public static void main(String[] args) {
        //首先在字符串常量池中,有"计算机"和"软件"两个字符串对象
        //接下来在堆上拼接对象"计算机软件"
        //这个时候字符串常量池中没有一个对象是"计算机软件"
        //所以用intern方法会把堆上的对象引用存入字符串常量池,所以str1.intern() == str1返回true
        String str1 = new StringBuilder("计算机").append("软件").toString();
        System.out.println(str1.intern() == str1);

        //和上述类似,str2.intern() == str2也应当返回true,但是实际它会返回false
        //这是因为"java"这个字符串对象早就已经存在于字符串常量池中了
        //于是堆上的对象引用和常量池中对象引用比较,肯定返回false
        String str2 = new StringBuilder("ja").append("va").toString();
        System.out.println(str2.intern() == str2);
    }
}
